Skip to content

fix(kill-switch-cf): R2 orderBy + core fallback + ALERT_STATE KV#30

Merged
mikeumus merged 1 commit into
mainfrom
fix/cf-worker-r2-orderby-and-kv
Jun 17, 2026
Merged

fix(kill-switch-cf): R2 orderBy + core fallback + ALERT_STATE KV#30
mikeumus merged 1 commit into
mainfrom
fix/cf-worker-r2-orderby-and-kv

Conversation

@mikeumus

Copy link
Copy Markdown
Contributor

Deploy-time follow-up to #29, found while shipping the worker to production.

  • R2 orderBy bug: r2StorageAdaptiveGroups was ordered by sum_objectCount_DESC — an invalid enum (those fields are max-aggregated gauges). It was harmless when R2 was its own try/catch'd query, but batching it into the core query (docs(agent-guard): README feature section, packages table, architecture, OpenAPI #8) made that one bad dataset fail the whole batch, taking DO/Worker/D1 down with it and flipping analyticsAuth to FAILING. Fix: drop the orderBy (we iterate all buckets regardless).
  • Per-dataset core fallback: mirrors the extended-batch behavior — on a non-auth failure, retry each core dataset individually so one quirk can't blind the rest. Only set analyticsAuth=FAILING on a genuine auth error.
  • Merge-safe parseCore: assigns only datasets present, so the fallback path doesn't clobber siblings.
  • Wire ALERT_STATE KV binding (namespace id) now that it exists.

Verified live on cloudflare-billing-kill-switch: analyticsAuth: OK, all datasets populated (DO/Worker/D1 + Workers AI + AI Gateway), fail-closed endpoints, KV cooldown active.

🤖 Generated with Claude Code

…k, wire ALERT_STATE KV

Deploy-time fixes found while shipping the worker:

- r2StorageAdaptiveGroups was ordered by `sum_objectCount_DESC`, an invalid enum
  (objectCount/payloadSize are max-aggregated gauges). Harmless when R2 was its
  own try/catch'd query, but batching it into the core query made that one bad
  dataset fail the whole batch — taking DO/Worker/D1 down with it and flipping
  analyticsAuth to FAILING. Drop the orderBy (we iterate all buckets anyway).
- Add per-dataset fallback for the core batch (mirrors the extended batch): on a
  non-auth failure, retry each core dataset individually so one quirk can't blind
  the rest. Only flip analyticsAuth=FAILING on a real auth error.
- Make parseCore merge-safe (assign only datasets present) so the fallback path
  doesn't clobber sibling datasets.
- Wire the ALERT_STATE KV binding (id) now that the namespace exists.

Verified live: analyticsAuth OK, all datasets populated (DO/Worker/D1 + Workers AI
+ AI Gateway), fail-closed endpoints, KV cooldown active.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mikeumus mikeumus merged commit 0205b1a into main Jun 17, 2026
@mikeumus mikeumus deleted the fix/cf-worker-r2-orderby-and-kv branch June 17, 2026 12:27
mikeumus added a commit that referenced this pull request Jun 17, 2026
queryR2Usage ordered r2StorageAdaptiveGroups by `sum_objectCount_DESC`, an invalid
enum (objectCount/payloadSize are max-aggregated gauges, not sums). The query
errored every cycle, but the try/catch fell back to a bare bucket list — so R2
detailed metrics (ops, storage GB) have silently always been empty/zero, and R2
threshold violations could never fire. Same root cause as the worker fix in #30.

Drop the orderBy (all returned buckets are iterated regardless of order).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant